home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 24 / AMIGAplus Sonderheft 24 (2000)(Falke)(DE)[!].iso / Rexx / AnimText.pprx < prev    next >
Text File  |  1999-11-06  |  12KB  |  508 lines

  1. /* Personal Paint Amiga Rexx script - Copyright © 1995-1998 Cloanto Italia srl */
  2.  
  3. /* $VER: AnimText.pprx 1.3 */
  4.  
  5. /** ENG
  6.   This script renders a text string using AnimFonts by Kara Computer
  7.   Graphics. The resulting animation is played or placed in the current
  8.   brush.
  9.  
  10.   One AnimFont is included with the Cloanto Personal Suite CD-ROM,
  11.   while The Kara Collection CD-ROM contains five AnimFonts.
  12. */
  13.  
  14. /** DEU
  15.   Dieses Skript erzeugt unter Verwendung der AnimFonts von Kara
  16.   Computer Graphics (nicht in Personal Paint enthalten) eine Zeichenfolge.
  17.   Die daraus resultierende Animation wird wahlweise abgespielt oder im
  18.   aktuellen Brush abgelegt.
  19.  
  20.   Die CD-ROM "The Kara Collection" enthält fünf AnimFonts. Die CD-ROM
  21.   "Personal Suite" enthält ein AnimFont. 
  22. */
  23.  
  24. /** ITA
  25.   Questo script realizza una stringa di testo utilizzando AnimFonts di Kara
  26.   Computer Graphics. L'animazione risultante viene mostrata oppure è inserita
  27.   nel pennello corrente.
  28.  
  29.   I font animati "AnimFonts" sono compresi nel CD-ROM Cloanto The Kara
  30.   Collection. Il CD-ROM Personal Suite contiene un font animato.
  31. */
  32.  
  33. absh_dir.1 = 'PPaint:AnimBrushes/AnimFonts'
  34. data_dir.1 = 'PPaint:AnimBrushes/AnimFonts'
  35. absh_dir.2 = 'KaraCD:PPaint/AnimBrushes/AnimFonts'
  36. data_dir.2 = 'KaraCD:PPaint/AnimBrushes/AnimFonts'
  37. absh_dir.3 = 'AnimBrushes/AnimFonts'
  38. data_dir.3 = 'AnimBrushes/AnimFonts'
  39. absh_dir.4 = 'PSuite:PPaint/AnimBrushes/AnimFonts'
  40. data_dir.4 = 'PSuite:PPaint/AnimBrushes/AnimFonts'
  41. absh_dir.5 = 'KaraCD:AnimFonts/AnimBrushes'
  42. data_dir.5 = 'KaraCD:AnimFonts/AnimBrushes'
  43. path_num   = 5
  44.  
  45. IF ARG(1, EXISTS) THEN
  46.     PARSE ARG PPPORT
  47. ELSE
  48.     PPPORT = 'PPAINT'
  49.  
  50. IF ~SHOW('P', PPPORT) THEN DO
  51.     IF EXISTS('PPaint:PPaint') THEN DO
  52.         ADDRESS COMMAND 'Run >NIL: PPaint:PPaint'
  53.         DO 30 WHILE ~SHOW('P',PPPORT)
  54.              ADDRESS COMMAND 'Wait >NIL: 1 SEC'
  55.         END
  56.     END
  57.     ELSE DO
  58.         SAY "Personal Paint could not be loaded."
  59.         EXIT 10
  60.     END
  61. END
  62.  
  63. IF ~SHOW('P', PPPORT) THEN DO
  64.     SAY 'Personal Paint Rexx port could not be opened'
  65.     EXIT 10
  66. END
  67.  
  68. ADDRESS VALUE PPPORT
  69. OPTIONS RESULTS
  70. OPTIONS FAILAT 10000
  71.  
  72. Get 'LANG'
  73. IF RESULT = 1 THEN DO        /* Deutsch */
  74.     txt_title_req     = 'AnimText-Einstellungen'
  75.     txt_gad_lst       = 'Anim_Font:'
  76.     txt_gad_str       = '_Text:'
  77.     txt_string_str    = 'Text'
  78.     txt_gad_cyc       = '_Darstellen:'
  79.     txt_gad_cyc0      = 'Von Links nach Rechts'
  80.     txt_gad_cyc1      = 'Gleichzeitig'
  81.     txt_gad_num0      = 'Ab_stand:'
  82.     txt_gad_num1      = 'Einzelbild-_Offset:'
  83.     txt_gad_chk       = 'Anim-_Brush:'
  84.     txt_err_oldclient = 'Für dieses Skript_ist eine neuere Version_von Personal Paint erforderlich'
  85.     txt_err_noafonts  = 'AnimFonts konnten nicht_gefunden werden'
  86.     txt_err_nodfile   = 'Fontdatei konnte nicht_gefunden werden'
  87.     txt_err_noenv     = 'Andere Umgebung_kann nicht erstellt werden'
  88. END
  89. ELSE IF RESULT = 3 THEN DO    /* Français */
  90.     txt_title_req     = "Réglages d'AnimText"
  91.     txt_gad_lst       = 'Anim_Font :'
  92.     txt_gad_str       = '_Texte :'
  93.     txt_string_str    = 'Texte'
  94.     txt_gad_cyc       = 'Apparitio_n :'
  95.     txt_gad_cyc0      = 'De gauche à droite'
  96.     txt_gad_cyc1      = 'Simultanément'
  97.     txt_gad_num0      = 'E_spacement :'
  98.     txt_gad_num1      = '_Retard :'
  99.     txt_gad_chk       = '_Brosse animée :'
  100.     txt_err_oldclient = 'Ce script nécessite une nouvelle_version de Personal Paint'
  101.     txt_err_noafonts  = 'AnimFonts non trouvées'
  102.     txt_err_nodfile   = 'Impossible de trouver_le fichier de données_de la police'
  103.     txt_err_noenv     = "Impossible de créer_l'autre environnement"
  104. END
  105. ELSE IF RESULT = 2 THEN DO    /* Italiano */
  106.     txt_title_req     = 'Parametri AnimText'
  107.     txt_gad_lst       = 'Anim_Font:'
  108.     txt_gad_str       = '_Testo:'
  109.     txt_string_str    = 'Testo'
  110.     txt_gad_cyc       = '_Scrittura:'
  111.     txt_gad_cyc0      = 'Da sinistra a destra'
  112.     txt_gad_cyc1      = 'Simultanea'
  113.     txt_gad_num0      = '_Spaziatura:'
  114.     txt_gad_num1      = 'Sp_ostamento:'
  115.     txt_gad_chk       = 'Anim-_Brush:'
  116.     txt_err_oldclient = 'Questa procedura richiede_una versione più recente_di Personal Paint'
  117.     txt_err_noafonts  = 'Impossibile trovare AnimFont'
  118.     txt_err_nodfile   = 'Impossibile aprire_il file dati'
  119.     txt_err_noenv     = 'Impossibile creare_ambiente alternativo'
  120. END
  121. ELSE DO                /* English */
  122.     txt_title_req     = 'AnimText Settings'
  123.     txt_gad_lst       = 'Anim_Font:'
  124.     txt_gad_str       = '_Text:'
  125.     txt_string_str    = 'Text'
  126.     txt_gad_cyc       = '_Render:'
  127.     txt_gad_cyc0      = 'Left to right'
  128.     txt_gad_cyc1      = 'Simultaneously'
  129.     txt_gad_num0      = '_Spacing:'
  130.     txt_gad_num1      = 'F_rame Offset:'
  131.     txt_gad_chk       = 'Anim-_Brush:'
  132.     txt_err_oldclient = 'This script requires a newer_version of Personal Paint'
  133.     txt_err_noafonts  = 'AnimFonts not found'
  134.     txt_err_nodfile   = 'Font data file_cannot be found'
  135.     txt_err_noenv     = 'Other environment_cannot be created'
  136. END
  137.  
  138. Version 'REXX'
  139. IF RESULT < 7 THEN DO
  140.     RequestNotify 'PROMPT "'txt_err_oldclient'"'
  141.     EXIT 10
  142. END
  143.  
  144. FreeBrush
  145. IF RC ~= 0 THEN
  146.     EXIT RC
  147.  
  148. /* Build the list of available AnimFonts */
  149.  
  150. tmpfname = 'T:pprx_temp.'PRAGMA('ID')
  151. ftot = 0
  152. CALL PRAGMA('Window', 'Null')
  153.  
  154. DO pnum = 1 to path_num
  155.     sv_cd = PRAGMA('D')
  156.     IF PRAGMA('D', absh_dir.pnum) = sv_cd THEN DO
  157.         CALL PRAGMA('D', sv_cd)
  158.         ADDRESS COMMAND 'List >'tmpfname' 'absh_dir.pnum' NOHEAD LFORMAT="%s" DIRS'
  159.         IF RC = 0 THEN DO
  160.             ADDRESS COMMAND 'Sort 'tmpfname tmpfname'.s'
  161.             IF RC = 0 THEN DO
  162.                 ADDRESS COMMAND 'Delete >NIL: 'tmpfname
  163.                 tmpfname = tmpfname'.s'
  164.             END
  165.             IF OPEN('listfile', tmpfname, 'R') THEN DO
  166.                 DO FOREVER
  167.                     fline = READLN('listfile')
  168.                     IF EOF('listfile') THEN BREAK
  169.                     ftot = ftot + 1
  170.                     fontname.ftot = fline
  171.                 END
  172.                 CALL CLOSE('listfile')
  173.             END
  174.         END
  175.         ADDRESS COMMAND 'Delete >NIL: 'tmpfname
  176.         IF ftot ~= 0 THEN
  177.             LEAVE
  178.     END
  179. END
  180. CALL PRAGMA('Window', 'Workbench')
  181.  
  182. IF ftot = 0 THEN DO
  183.     RequestNotify 'PROMPT "'txt_err_noafonts'"'
  184.     EXIT 10
  185. END
  186.  
  187.  
  188. /* Build and show the settings requester */
  189.  
  190. font = LoadSet('Font', 0)
  191. txt_string_str = LoadSet('Text', txt_string_str)
  192. render  = LoadSet('Render', 0)
  193. spacing = LoadSet('Spacing', 0)
  194. offset  = LoadSet('Offset', 0)
  195. getbsh  = LoadSet('Getbsh', 1)
  196.  
  197. req = '"LIST = ""'txt_gad_lst'"", 'ftot', 'font', 20, 5'  /* max 5 rows to fit into a 320x200 screen */
  198. DO f = 1 TO ftot
  199.     req = req || ', ""' || fontname.f || '""'
  200. END
  201.  
  202. req = req ||,
  203.     ' STRING = ""'txt_gad_str'"", 256, ""'txt_string_str'"" ' ||,
  204.     'CYCLE = ""'txt_gad_cyc'"", 2, 'render', ""'txt_gad_cyc0'"", ""'txt_gad_cyc1'"" ' ||,
  205.     'INTSTR = ""'txt_gad_num0'"", -32768, 32767, 'spacing' ' ||,
  206.     'INTSTR = ""'txt_gad_num1'"", -32768, 32767, 'offset' ' ||,
  207.     'CHECK = ""'txt_gad_chk'"", 'getbsh' "'
  208.  
  209. Request 'RESIZE "'txt_title_req'"' req
  210. IF RC = 0 THEN DO
  211.     font    = RESULT.1
  212.     text    = RESULT.2
  213.     render  = RESULT.3
  214.     spacing = RESULT.4
  215.     offset  = RESULT.5
  216.     getbsh  = RESULT.6
  217.  
  218.     CALL SaveSet('Font', font)        /* setting persistence */
  219.     CALL SaveSet('Text', text)
  220.     CALL SaveSet('Render', render)
  221.     CALL SaveSet('Spacing', spacing)
  222.     CALL SaveSet('Offset', offset)
  223.     CALL SaveSet('Getbsh', getbsh)
  224. END
  225. ELSE EXIT 0
  226.  
  227. font = font + 1
  228. abshpath = absh_dir.pnum'/'fontname.font'/'
  229. dataname = data_dir.pnum'/'fontname.font'.data'
  230.  
  231. len = LENGTH(text)
  232. fontdata. = 'undef'
  233.  
  234.  
  235.  
  236. /* Read data file */
  237.  
  238. IF OPEN('datafile', dataname, 'R') THEN DO
  239.     READLN('datafile')
  240.     skip_first = READLN('datafile')
  241.     frm_offset = READLN('datafile')
  242.     DO FOREVER
  243.         fline = READLN('datafile')
  244.         IF EOF('datafile') THEN BREAK
  245.         PARSE VAR fline chr nm spc hdx
  246.         fontdata.name.chr  = nm
  247.         fontdata.space.chr = spc
  248.         fontdata.handx.chr = hdx
  249.     END
  250.     CALL CLOSE('datafile')
  251. END
  252. ELSE DO
  253.     RequestNotify 'PROMPT "'txt_err_nodfile'"'
  254.     EXIT 10
  255. END
  256.  
  257.  
  258.  
  259. /* Render the text */
  260.  
  261. LockGUI
  262.  
  263. Get 'IMAGEW'
  264. img_width = RESULT
  265. Get 'DISPLAY'
  266. img_disp = RESULT
  267.  
  268. SwitchEnvironment
  269. FreeEnvironment 'QUERY'
  270. IF RC ~= 0 THEN DO
  271.     UnlockGUI
  272.     EXIT RC
  273. END
  274.  
  275. Get 'GCLIP'
  276. saveclip = RESULT
  277. Set '"GCLIP=0"'
  278.  
  279. DeleteFrames 'ALL FORCE'
  280. ClearImage
  281. SetPaintMode 'MATTE'
  282. xmax = 0
  283. ymax = 0
  284. error = 0
  285. IF render = 0 THEN DO    /* Left to right */
  286.     xpos = 0
  287.     ypos = 0
  288.     first = 1
  289.     DO c = 1 TO len
  290.         chr = UseChar(SUBSTR(text, c, 1))
  291.         IF chr = 32 | chr = 60 | chr = 62 THEN DO
  292.             IF fontdata.space.chr ~= 'undef' THEN
  293.                 xpos = xpos + fontdata.space.chr + spacing
  294.         END
  295.         ELSE DO
  296.             LoadAnimBrush '"'abshpath || fontdata.name.chr'"' FORCE QUIET NOPROGRESS
  297.             IF RC = 0 THEN DO
  298.                 Get